#ifndef __LINKLIST_H_
#define __LINKLIST_H_

#include <stddef.h>


using ElementType = int;
class LInkList
{
public:
    LInkList();
    //拷贝构造
    LInkList(const LInkList &list);
    ~LInkList();
    //尾插法
    void InsertTail(const ElementType & element);
    //头插
    void InsertHead(const ElementType & element);
    //中间插入
    void InsertByIndex(int index,const ElementType & element);
    //按值删除
    void RemoveByElement(const ElementType & element);
    //按位置删除
    void RemoveByIndex(int index);
    //按位修改
    void UpdataByIndex(int index, const ElementType & element);
    //按值修改
    void UpdataByElement(const ElementType & oldValue,const ElementType & newValue);
    //链表排序
    void BubbleSore();//冒泡
    //归并
    LInkList Merge(const LInkList & lits);
    //快速排序
    void Sort();
    //链表逆序
    void Reserve();
    //逆序(递归)
    void Reserve2();
    LInkList Merge2(LInkList *list[], int start, int end);
    
    void show();
private:
    
    //结点
    struct Node
    {
        Node(const ElementType & value):value(value),next(nullptr){}
        ElementType value;//数据域
        Node * next;//指针域
    };
    Node *Reserve2(Node *node);
    void FastSort(Node *start,Node *end);
    Node * head;//头指针
    size_t size;//结点个数
};




#endif